package com.zrrd.learn.chapter06数组;

import java.util.Arrays;

/**
 * 数组练习
 *
 * @author wrn
 * @version 1.0
 * @date 2023/7/12 15:40
 */

public class ArrayLianxi01 {

    public static void main(String[] args) {
        /**
         * 1.现有一个数组{1,2,3,4,5,6,7} ,请将数组里面的{3,4,5}复制到新的数据里面
         */
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        int[] narr = Arrays.copyOfRange(arr, 2, 5);
        System.out.println("原数组" + Arrays.toString(arr));
        System.out.println("新数组" + Arrays.toString(narr));

        /**
         * 2.现有一个数组，数组里面存在大量元素其値范围为 1-5,即数组里面的全部元素只能为1-5的数。
         * 如 ，请统计出当前数组里面1,2,3,4,5，分别出现的次数。
         */

        int[] array = {1, 1, 1, 2, 3, 3, 4, 2, 2, 4, 5, 5, 1, 2, 3, 6, 7};
        //1 : 先排序
        Arrays.sort(array);
        //2 : 先来一次输出
        System.out.println("排序后的数组" + Arrays.toString(array));
        //3 : 先拿到第一个


        for (int i = 0; i < array.length; i++) {
            int num = 0;
            for (int j = i; j < array.length; j++) {
                if (array[j] < 6 && array[j] > 0) {
                    if (array[i] != array[j]) {
                        num = j;
                        break;
                    }
                }
            }
            System.out.printf("当前数组里的%d,有%d个\n", array[i], num == 0 ? array.length - i : num - i);
            i = (num == 0) ? array.length - 1 : num - 1;
        }


        /**
         * 现有一个二维数组内容为
         * [
         *     [1,2,3]
         *     [4,5,6]
         *     [7,8,9]
         * ]
         * 定义方式如下
         * int[][] arr = new int[3][3];
         * 请求出左对角线的和
         *
         * 请求出右对角线的和
         */

        int[][] arrd = {{1, 2, 3}, {4, 9, 6}, {7, 8, 9}};

        int num = 0;
        for (int i = 0; i < arrd.length; i++) {
            for (int j = 0; j < arrd[i].length; j++) {
                if (i == j) {
                    num += arrd[i][j];
                }
            }
        }
        System.out.printf("左对角线和" + num + "\n");


        int num1 = 0;
        int num2 = 0;
        for (int i = 0; i < arrd.length; i++) {
            num1 += arrd[i][i];
        }
        System.out.println(num1);
        for (int i = 0; i < arrd.length; i++) {
            num2 += arrd[i][arrd.length - i - 1];
        }
        System.out.printf("右对角线和" + num2 + "\n");

    }

}


